package com.java.java基础.线程;


/**
 * learn韩顺平多线程学习
 *
 */
// 线程常用方法1
/*setName 为线程设置名称*/
/*getName 获取线程名称*/
/*start 启动线程*/
/*run 线程执行体 调用线程的方法*/
/*setPriority 设置线程优先级*/
/*getPriority 获取线程优先级*/
/*sleep 线程休眠*/
/*interrupted 中断线程 如果正在休眠就提前唤醒*/
// 线程常用方法2
/*yield 让当前线程释放cpu资源，让出时间片*/
/*getName 获取线程名称*/
/*start 启动线程*/
/*run 线程执行体 调用线程的方法*/
/*setPriority 设置线程优先级*/
/*getPriority 获取线程优先级*/
/*sleep 线程休眠*/
/*interrupted 中断线程 如果正在休眠就提前唤醒*/
/*join 线程插队--方法让主线程等待子线程执行完毕之后再执行*/
public class ThreadS2{
    public static void main(String[] args) throws InterruptedException {
        /*2.start方法启动线程*/
        new Cat().start(); // 点击运行，又开启一个线程开始执行
        Cat cat2 = new Cat();
        cat2.start();
        /*主线程不会阻塞，主线程继续执行，主线程和子线程是并行的，主线程和子线程是交替执行的*/
        //主线程与子线程是交替执行的-实例
        for (int i = 0; i < 10; i++){
            Thread.sleep(1000);
            System.out.println("主线程" + i);
        }
    }
}
/*1.通过继承Thread类创建线程 -该类可以继承Thread类，重写run方法，创建线程*/
//    底层：Thread的run方法是实现Runable接口来重写的run方法
class Cat  extends Thread{
    /*重写run方法,写自己的逻辑*/
    @Override
    public void run() { // 启动一个进程并开启了一个主线程
        int times = 0;
        while (true){
            System.out.println("喵喵的线程学习" + (++times) + "线程名：" +Thread.currentThread().getName());
            try {
                Thread.sleep(1000); // 线程休眠1秒
            }catch (Exception e){
                Cat.interrupted();//中断休眠
                e.printStackTrace();
            }
            /*当times==10时，线程结束*/
            if (times == 10){
                System.out.println("线程结束");
                break;
            }
        }
    }
    /*底层为代理*/
}
